Go のランタイムはなぜ完全なデッドロック検出を提供していないか
from Go言語で学ぶ並行プログラミング 他言語にも適用できる原則とベストプラクティス
Resource Allocation Graph の循環を調べてデッドロックを検出する機構は、パフォーマンス の観点から見ると高価な処理
根拠
ランタイム は RAG を維持する必要があり、リソースの要求または解放が行われるごとに、循環していないか調べる必要がある
そのため、多数の ゴルーチン がリソースの要求と解放を行う場合、都度検出アルゴリズムを行う必要があり、処理が遅くなる
また、ゴルーチンが同時に複数の排他的リソースを使う ユースケース が少ない
じゃあなぜ RDBMS では検出しているのか?
∵ 検出アルゴリズムがデータベース操作に比べて高速なので、パフォーマンスに影響を及ぼさないため
#GO